package com.ethink.warehouse.api;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ethink.warehouse.api.info.MateInventoryDetailInfo;
import com.ethink.warehouse.api.request.*;
import com.ethink.warehouse.api.response.MateInventoryOutResponse;
import com.ethink.warehouse.api.response.MateInventoryQueryBySkuResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * 仓库库存 Facade接口
 *
 * @author default
 * @date 2022-11-08
 */
@FeignClient(name = "ethink-warehouse-service", path = "warehouse-service/facade/v1/mateInventory", contextId = "mateInventoryFacade")
public interface MateInventoryFacade {

    @PostMapping("/queryMateInventory")
    @ResponseBody
    Page<MateInventoryDetailInfo> queryMateInventory(@RequestBody MateInventoryQueryRequest request);

    @PostMapping("/queryMateInventoryBySku")
    @ResponseBody
    Page<MateInventoryQueryBySkuResponse> queryMateInventoryBySku(@RequestBody MateInventoryQueryBySkuRequest request);

    @PostMapping("/listMateInventoryByIdList")
    @ResponseBody
    List<MateInventoryDetailInfo> listMateInventoryByIdList(@RequestBody List<Long> idList);

    @PostMapping("/listMateInventoryByKeyList")
    @ResponseBody
    List<MateInventoryDetailInfo> listMateInventoryByKeyList(@RequestBody List<MateInventoryQueryKeyInfo> keyList);

    @PostMapping("/listMateInventoryByMateSkuList")
    @ResponseBody
    List<MateInventoryDetailInfo> listMateInventoryByMateSkuList(@RequestBody List<MateInventoryQueryKeyInfo> mateSkuList);

    @PostMapping("/lockMateInventory")
    @ResponseBody
    void lockMateInventory(@RequestBody List<MateInventoryLockLogAddRequest> requests);

    @PostMapping("/releaseLockMateInventory")
    @ResponseBody
    void releaseLockMateInventory(@RequestBody List<MateInventoryLockLogAddRequest> requests);

    @PostMapping("/outMateInventory")
    @ResponseBody
    MateInventoryOutResponse outMateInventory(@RequestBody MateInventoryOutRequest request);

    @PostMapping("/listMateInventoryByPurchaseDetailOrderNoList")
    @ResponseBody
    List<MateInventoryDetailInfo> listMateInventoryByPurchaseDetailOrderNoList(@RequestBody List<String> purchaseDetailOrderNoList);

    @PostMapping("/addMateInventoryOrderAddT51OrT91")
    @ResponseBody
    void addMateInventoryOrderAddT51OrT91(@RequestBody List<MateInventoryOrderAddT51OrT91Request> requests);

    @PostMapping("/countByMateSkuList")
    @ResponseBody
    Integer countByMateSkuList(@RequestBody List<String> mateSkuList);

    @PostMapping("/queryMateInventoryBySkuSum")
    @ResponseBody
    MateInventoryQueryBySkuResponse queryMateInventoryBySkuSum(@RequestBody MateInventoryQueryBySkuRequest request);

    @PostMapping("/queryMateInventorySum")
    @ResponseBody
    MateInventoryDetailInfo queryMateInventorySum(@RequestBody MateInventoryQueryRequest request);

}